Este modelo tiene como objetivo determinar cuando me cuesta hacer n casas de tipo proyecto vivienda pública en Ecuador.
La base de datos contiene 61 filas, esta fue modificada para tener el número de casas de tipo vivienda 1 y el costo de realización de ese conjunto de casas.
Importar Bibliotecas
Code
## Bibliotecas importadasimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.model_selection import train_test_split, learning_curvefrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_squared_error, r2_scoreimport numpy as npimport ipywidgets as widgetsfrom IPython.display import display
Cargar la base de datos
Code
casas = pd.read_excel("Reg.xlsx")casas.head()
CT
NV
0
502804.81
29
1
854082.54
51
2
1125092.22
65
3
410532.20
23
4
335996.20
19
Dividir en entreamiento y prueba
Code
X = casas[['NV']] # columna con el número de viviendasy = casas[['CT']] # columna con el costo total X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
Mean Squared Error (MSE): 536069253.75
R² Score: 0.9943
Comparación de valores reales y predichos
Code
plt.figure()plt.scatter(y_test, y_pred)plt.xlabel("Valores reales")plt.ylabel("Valores predichos")plt.title("Comparación entre valores reales y predichos")plt.grid(True)plt.show()
Visualización de la curva de aprendizaje
Code
train_sizes, train_scores, test_scores = learning_curve(modelo, X, y, cv=5, scoring='r2')train_mean = np.mean(train_scores, axis=1)test_mean = np.mean(test_scores, axis=1)plt.figure()plt.plot(train_sizes, train_mean, label="Entrenamiento")plt.plot(train_sizes, test_mean, label="Validación")plt.xlabel("Tamaño del conjunto de entrenamiento")plt.ylabel("R² Score")plt.title("Curva de aprendizaje")plt.legend()plt.grid(True)plt.show()
Qué paso con el \(R^2\)? El \(R^2\) nos dice que este modelo tiene un buen ajuste lineal de datos.
Cómo pruebo con un dato nuevo.
Cuánto dinero necesito para hacer N casas?
Code
n_input = widgets.FloatText( value=None, description='Casas:', disabled=False)# Botón para ejecutar la predicciónbutton = widgets.Button(description="Predecir")# Etiqueta para mostrar resultadooutput = widgets.Output()def predecir_costo(b):with output: output.clear_output() n = n_input.value pred = modelo.predict([[n]])[0]print(f"Para construir {n:.0f} casas, se necesitan aproximadamente ${pred:,.2f}")button.on_click(predecir_costo)display(n_input, button, output)